package Lambda;

import java.util.*;
import java.util.stream.Collectors;

public class LambdaDemo {
    public static void main(String[] args) {
        //Lambda进行集合遍历
        List<String> studentNames = Arrays.asList("James","Bosh","Wade");
        studentNames.forEach(stu-> System.out.println(stu));

        //排序
        studentNames.sort((p1,p2)->p1.compareTo(p2));   //p1 位置参数compareto p2，意思就是字典序顺序; p2 comapreto p1，意思就是逆字典序
        //这里是String的排序。如果是整数，用Integer.Compare(int a,int b);
        studentNames.forEach(System.out::println); //打印结果

        //第二种排序
        Collections.sort(studentNames,(String a,String b)-> b.compareTo(a));
        studentNames.forEach(System.out::println);

        //把B开头的student加入到一个新的列表中
        List<String> bStudentList = studentNames.stream().filter((name) -> name.startsWith("B")).collect(Collectors.toList());
        bStudentList.forEach(System.out::println);

        //取出学生姓名的长度到一个新的list中
        List<Integer> nameLen = studentNames.stream().map((name) -> name.length()).collect(Collectors.toList());
        nameLen.forEach(System.out::println);

        //数组元素求和
        List<Integer> number = Arrays.asList(1,2,3,4,5,77);
        int sum = number.stream().reduce(0,(a,b)->a+b);//reduce 第一个参数是起始值， a第一个位置参数 = a + b 这个操作的结果值存入第一个位置参数，进行下轮循环的同样操作
        System.out.println("sum = "+sum);

        //对student 的姓名长度分组:三个字的一组，两个字的一组
        List<String> stu = Arrays.asList("刘芳","刘勃挂","曾明","戚善德","吴明","山上图木","七家设","不知火玄间");
        Map<Integer,List<String>> group =stu.stream().collect(Collectors.groupingBy(student->student.length()));//流处理 再收集，收集之前要做的操作：按照姓名长度分组group
        group.forEach((len,names)->{
            System.out.println("这些名字的长度为"+len);
            names.forEach(System.out::println);
        });

        //Lambda 实现接口：  接口 obj = （）-> {} ;  obj.方法();
        Thread thread1 = new Thread(
                new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("这里是第二个进程");
                    }
                }
        );thread1.start();

        Runnable thread2 = ()-> System.out.println("这是第三个进程");
        thread2.run();

        //流水线操作 把所有刘姓学生 替换成陈姓放入新的list，并且排序
        List<String> fakePeople = stu.stream().filter(name-> name.startsWith("刘"))
                .map((s)->s.replace("刘","陈"))
                .sorted().collect(Collectors.toList());
        System.out.println(fakePeople);



    }
}
